home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
bbsutil
/
hsrc_117.zip
/
POSTMESS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-11-27
|
16KB
|
559 lines
#include <msgg.h>
#include <twindow.h>
#include <keys.h>
#include "headedit.h"
#include "headid.h"
extern word vbase;
extern word maxx;
extern word maxy;
extern char current_color;
extern word videomethod;
extern WINDOW *ewnd;
extern long make_msgid (void);
void pascal post_mess (char *fname) {
char *p;
char message[133];
word lenmess;
struct date dos_date;
int handlem;
int handlet;
int handlef;
long mlen;
long tlen;
long flen;
struct ffblk f;
char level=0;
char temp;
struct _carbon *carbon[20]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
char numcarbons=0;
WINDOW *carbwnd=NULL;
struct _bomb_addr *bomb_addr=NULL;
char lastnumcarbons=0;
EditSomeMore:
if (!*fname) {
strcpy(message,"MSGTMP");
}
else strcpy(message,fname);
*filename=0;
if ((currarea->attr & ANSI) && ansieditor) strcpy(filename,ansieditor);
else if (editor) strcpy(filename,editor);
if(*filename) {
do_spawn(filename);
}
else {
if(template) {
strcpy(filename,template);
do_spawn(filename);
}
strcpy(notefile,"MSGTMP");
notepad();
}
if (findfirst(message,&f,0)) level=1;
else if (f.ff_fsize<3L) level=1;
if (!level) {
AskAgain:
set_help ("atpost ",0,22);
show_header(0);
if(carbon) {
int register x;
if(lastnumcarbons!=numcarbons) {
if(carbwnd) delete_window(carbwnd);
if((currarea->attr & NET) || (currarea->attr & ALTERNATE)) {
carbwnd=establish_window(1,maxy-24,21,70);
}
else carbwnd=establish_window(1,maxy-24,21,40);
set_border(carbwnd,3);
set_title(carbwnd," Carbons ");
set_colors(carbwnd,BORDER,7,0,0);
display_window(carbwnd);
wcursor(carbwnd,0,0);
for(x=0;x<numcarbons;x++) {
if((currarea->attr & NET) || (currarea->attr & ALTERNATE)) {
wprintf(carbwnd," %-36s (%u:%u/%u.%u) %d\x9b",carbon[x]->name,carbon[x]->zone,carbon[x]->net,carbon[x]->node,carbon[x]->point);
}
else wprintf(carbwnd," %s",carbon[x]->name);
if(x<numcarbons-1)wprintf(carbwnd,"\n");
}
lastnumcarbons=numcarbons;
}
}
if (msg.d_zone!=msg.o_zone && ((currarea->attr & NET) || (currarea->attr & ALTERNATE))) {
sprintf(filename," (%u:%u/%u): [S]ave, [A]bort, [C]arbons, [B]omb or [E]dit Header? [S] ",msg.d_zone,msg.dest_net,msg.dest);
any_message(filename);
}
else if(msg.d_zone==msg.o_zone && msg.dest==msg.orig && msg.dest_net==msg.orig_net && msg.d_point==msg.o_point && ((currarea->attr & NET) || (currarea->attr & ALTERNATE))) {
any_message(" (Misaddressed?) [S]ave, [A]bort, [C]arbons, [B]omb or [E]dit Header? [S] ");
}
else if((currarea->attr & NET) || (currarea->attr & ALTERNATE)) {
any_message("[S]ave, [A]bort, [C]arbons, [B]omb or [E]dit Header? [S] ");
}
else if(!(currarea->attr & ECHO) && !(currarea->attr & ALTECHO)) {
any_message(" [S]ave, [A]bort, [C]arbons or [E]dit Header? [S] ");
}
else any_message(" [S]ave, [A]bort, or [E]dit Header? [S] ");
temp=toupper(generic_mouse_input(ewnd));
switch ((int)temp) {
case CTRL_R: clear_message();
goto EditSomeMore;
case ALT_O: get_origin();
goto AskAgain;
case CTRL_O: usedefault=1-usedefault;
if(usedefault) any_message(" Always using default origin line");
else any_message(" Looking up origin lines in ORIGINS.BBS ");
pause();
goto AskAgain;
case CTRL_W: wrapit=1-wrapit;
if(wrapit || !wrapcall) _anymsg(" Toggled Wrapping "," OFF ");
else _anymsg(" Toggled Wrapping "," ON ");
pause();
goto AskAgain;
case 13:
case 'S': break;
case 'A': level=1;
get_rid();
if(carbwnd)delete_window(carbwnd);
if(numcarbons) {
int register x;
for(x=0;x<numcarbons;x++) if(carbon[x])free(carbon[x]);
}
if(bomb_addr)free(bomb_addr);
return;
case 'E': clear_message();
edit_mess(2);
goto AskAgain;
case 'C': if((currarea->attr & ECHO) || (currarea->attr & ALTECHO)) goto AskAgain;
if(numcarbons>18) {
error_message(" Max # of carbons in use--Delete one ");
nopause();
goto AskAgain;
}
carbon[numcarbons]=(struct _carbon *)malloc(sizeof(struct _carbon));
if(!carbon[numcarbons]) {
error_message(" Insufficient memory for carbon ");
pause();
goto AskAgain;
}
if(!fill_in_carbon(carbon[numcarbons])) {
free(carbon[numcarbons]);
}
else numcarbons++;
goto AskAgain;
case 'D': if(!numcarbons) goto AskAgain;
else {
int x;
int y;
any_message(" Select carbon. [Enter] deletes, ESC aborts ");
sleep(1);
set_help("delcarbon ",0,23);
clear_message();
x=get_selection(carbwnd,numcarbons,NULL);
if(x && x<numcarbons+1) {
for(y=(x-1);y<numcarbons;y++) {
memcpy(carbon[y],carbon[y+1],sizeof(struct _carbon));
}
if(carbon[numcarbons-1])free(carbon[numcarbons-1]);
numcarbons--;
}
}
set_help ("atpost ",0,23);
goto AskAgain;
case 'B': if((!(currarea->attr & NET) && !(currarea->attr & ALTERNATE)) || !nidxsize || numcarbons) goto AskAgain;
bomb_addr=(struct _bomb_addr *)malloc(sizeof(struct _bomb_addr *));
if(!bomb_addr) {
error_message(" Insufficient memory for bomb run ");
pause();
goto AskAgain;
}
if(!bomb_who(bomb_addr)) {
free(bomb_addr);
bomb_addr=NULL;
goto AskAgain;
}
break;
default: goto AskAgain;
}
}
clear_message();
if(carbwnd) delete_window(carbwnd);
if (level) {
if (editor) {
any_message(" Aborted--Any Key ");
pause();
}
get_rid();
if(numcarbons) {
int register x;
for(x=0;x<numcarbons;x++) if(carbon[x])free(carbon[x]);
}
if(bomb_addr)free(bomb_addr);
return;
}
if (wrapcall && !wrapit && editor && !(currarea->attr & ANSI)) {
do_spawn(wrapcall);
}
sprintf(filename,"%sXDATA.%03x",path,areano);
sprintf(textname,"%sXTEXT.%03x",path,areano);
AccessLoop1:
if (findfirst(filename,&f,0)) flen=0;
else flen=f.ff_fsize;
if ((handlef=_open(filename,O_RDWR | O_BINARY | O_DENYNONE))==-1) {
if (errno==EACCES) {
any_message(" Awaiting access... ");
goto AccessLoop1;
}
if((handlef=creat(filename,S_IWRITE))==-1) {
error_message(" Can't open message base ");
pause();
get_rid();
if(numcarbons) {
int register x;
for(x=0;x<numcarbons;x++) if(carbon[x])free(carbon[x]);
}
if(bomb_addr)free(bomb_addr);
return;
}
}
clear_message();
lock(handlef,flen,(long)sizeof(struct _xmsg));
lseek(handlef,0L,SEEK_END);
AccessLoop:
if (findfirst(textname,&f,0))tlen=0;
else tlen=f.ff_fsize;
if ((handlet=_open(textname,O_RDWR | O_BINARY | O_DENYNONE))==-1) {
if (errno==EACCES) {
any_message(" Awaiting access... ");
goto AccessLoop;
}
if((handlet=creat(textname,S_IWRITE))==-1) {
error_message(" Can't open message files ");
_close(handlef);
pause();
get_rid();
if(numcarbons) {
int register x;
for(x=0;x<numcarbons;x++) if(carbon[x])free(carbon[x]);
}
if(bomb_addr)free(bomb_addr);
return;
}
}
clear_message();
lock(handlet,tlen,65535L);
lseek(handlet,0L,SEEK_END);
lenmess=0;
if (!*fname) {
strcpy(message,"MSGTMP");
}
else strcpy(message,fname);
if (findfirst(message,&f,0)) mlen=0;
else mlen=f.ff_fsize;
if ((handlem=_open(message,O_RDONLY | O_BINARY | O_DENYNONE))==-1) {
error_message(" Read error...lost ");
_close(handlef);
_close(handlet);
pause();
if(numcarbons) {
int register x;
for(x=0;x<numcarbons;x++) if(carbon[x])free(carbon[x]);
}
if(bomb_addr)free(bomb_addr);
return;
}
lock(handlem,0,mlen);
msg.start=tell(handlet);
lenmess=0;
if ((currarea->attr & NET) || (currarea->attr & ALTERNATE)) {
c